package com.hjx.objectassert.model;

import com.hjx.objectassert.ObjectUtil;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 账单详情
 * 
 * //@author xuyiming
 *
 */
public class Expense {
	/**
	 * 消费记录ID
	 */
	//@Pattern(regexp = "[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12}", message = "银行卡ID")
	private String id;
	/**
	 * 卡号末4位
	 */
	//@Size(max = 64, message = "卡号后四位")
	//@JSONField(name="card_num")
	private String cardNum;
	/**
	 * 记账日期.格式为yyyy-MM-dd
	 */
//	//@Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2}$|")
//	//@Pattern(regexp = "^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$|")
	//@JSONField(format="yyyy-MM-dd",name="post_date")
	private Date postDate;
	/**
	 * 消费类型(WITHDRAW-取现;PAYMENTS-还款：INTEREST-预期利息:OVERDUEPAYMENT-延滞金：
	 * OVERDUEFEE-超额费:INSTALLMENT.分期： SHOPPING-消费：OTHERFEE-其他费用）
	 */
	//@Size(max = 64)
	//@Pattern(regexp = "[A-Z]+")
	//@JSONField(name="category")
	private String category;
	/**
	 * 排序
	 */
	//@JSONField(name="order_index")
	private Long orderIndex = 0L;
	/**
	 * 交易时间.格式为yyyy-MM-dd HH:mm:ss
	 */
//	//@Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$|")
	//@JSONField(format="yyyy-MM-dd HH:mm:ss",name="trans_date")
	private Date transDate;
	/**
	 * 币种.CNY-人民币;USD_美元
	 */
	//@Size(max = 10, message = "固定值：人民币-CNY/美元-USD/港币-HKD/欧元-EUR/英镑-GBP/日元-JPY/加南大元-CAD/瑞士法郎-CHF/澳大利亚元-AUD/新加坡元-SGD/韩元-KRW/泰铢-THB/马来西亚币-MYR/澳门币-MOP/新台币-TWD/法郎-DJF/-俄罗斯卢布-RUB/阿联酋迪拉姆-AED/越南盾-VND/其他OTHER")
	//@Pattern(regexp = "[A-Z]+", message = "币种")
	//@JSONField(name="currency_type")
	private String currencyType;
	/**
	 * 消费金额
	 */
	//@JSONField(name="amount_money")
	private BigDecimal amountMoney = null;
	/**
	 * 余额
	 */
	private BigDecimal balance = null;
	/**
	 * 交易地点
	 */
	//@JSONField(name="trans_addr")
	private String transAddr;
	/**
	 * 交易方式
	 */
	//@Size(max = 64, message = "交易方式")
	//@JSONField(name="trans_method")
	private String transMethod;
	/**
	 * 交易通道
	 */
	//@Size(max = 64, message = "交易通道")
	//@JSONField(name="trans_channel")
	private String transChannel;
	/**
	 * 描述
	 */
	//@Size(max = 256, message = "描述")
	private String description;
	/**
	 * 备注
	 */
	//@Size(max = 256, message = "描述")
	//@JSONField(name="remark")
	private String remark;
	/**
	 * 对方卡号
	 */
	//@Size(max = 256, message = "对方卡号")
	//@JSONField(name="opposite_card_no")
	private String oppositeCardNo;
	/**
	 * 对方持卡人
	 */
	//@Size(max = 256, message = "对方持卡人")
	//@JSONField(name="name_on_opposite_card")
	private String nameOnOppositeCard;
	/**
	 * 对方银行
	 */
	//@Size(max = 256, message = "对方银行")
	//@JSONField(name="opposite_bank")
	private String oppositeBank;

	/**
	 * 消费记录ID
	 *
	 * //@return
	 */
	public String getId() {
		return id;
	}

	/**
	 * 消费记录ID
	 * 
	 * //@param id
	 */
	public void setId(String id) {
		this.id = id;
	}

	/**
	 * 卡号末4位
	 *
	 * //@return
	 */
	public String getCardNum() {
		return cardNum;
	}

	/**
	 * 卡号末4位
	 * 
	 * //@param cardNum
	 */
	public void setCardNum(String cardNum) {
		this.cardNum = cardNum;
	}

	/**
	 * 记账日期.格式为yyyy-MM-dd
	 *
	 * //@return
	 */
	public Date getPostDate() {
		return postDate;
	}

	/**
	 * 记账日期.格式为yyyy-MM-dd
	 * 
	 * //@param postDate
	 */
	public void setPostDate(Date postDate) {
		this.postDate = postDate;
	}

	public String getCategory() {
		return category;
	}

	public void setCategory(String category) {
		this.category = category;
	}

	/**
	 * 排序
	 *
	 * //@return
	 */
	public Long getOrderIndex() {
		return orderIndex;
	}

	/**
	 * 排序
	 * 
	 * //@param orderIndex
	 */
	public void setOrderIndex(Long orderIndex) {
		this.orderIndex = orderIndex;
	}

	/**
	 * 交易时间.格式为yyyy-MM-dd HH:mm:ss
	 *
	 * //@return
	 */
	public Date getTransDate() {
		return transDate;
	}

	/**
	 * 交易时间.格式为yyyy-MM-dd HH:mm:ss
	 * 
	 * //@param transDate
	 */
	public void setTransDate(Date transDate) {
		this.transDate = transDate;
	}

	/**
	 * 币种.CNY-人民币;USD_美元
	 *
	 * //@return
	 */
	public String getCurrencyType() {
		return currencyType;
	}

	/**
	 * 币种.CNY-人民币;USD_美元
	 * 
	 * //@param currencyType
	 */
	public void setCurrencyType(String currencyType) {
		this.currencyType = currencyType;
	}

	/**
	 * 消费金额
	 *
	 * //@return
	 */
	public BigDecimal getAmountMoney() {
		return amountMoney;
	}

	/**
	 * 消费金额
	 * 
	 * //@param amountMoney
	 */
	public void setAmountMoney(BigDecimal amountMoney) {
		this.amountMoney = amountMoney;
	}

	/**
	 * 余额
	 *
	 * //@return
	 */
	public BigDecimal getBalance() {
		return balance;
	}

	/**
	 * 余额
	 * 
	 * //@param balance
	 */
	public void setBalance(BigDecimal balance) {
		this.balance = balance;
	}

	/**
	 * 交易地点
	 *
	 * //@return
	 */
	public String getTransAddr() {
		return transAddr;
	}

	/**
	 * 交易地点
	 * 
	 * //@param transAddr
	 */
	public void setTransAddr(String transAddr) {
		this.transAddr = transAddr;
	}

	/**
	 * 交易方式
	 *
	 * //@return
	 */
	public String getTransMethod() {
		return transMethod;
	}

	/**
	 * 交易方式
	 * 
	 * //@param transMethod
	 */
	public void setTransMethod(String transMethod) {
		this.transMethod = transMethod;
	}

	/**
	 * 交易通道
	 *
	 * //@return
	 */
	public String getTransChannel() {
		return transChannel;
	}

	/**
	 * 交易通道
	 * 
	 * //@param transChannel
	 */
	public void setTransChannel(String transChannel) {
		this.transChannel = transChannel;
	}

	/**
	 * 描述
	 *
	 * //@return
	 */
	public String getDescription() {
		return description;
	}

	/**
	 * 描述
	 * 
	 * //@param description
	 */
	public void setDescription(String description) {
		this.description = description;
	}

	/**
	 * 备注
	 *
	 * //@return
	 */
	public String getRemark() {
		return remark;
	}

	/**
	 * 备注
	 * 
	 * //@param remark
	 */
	public void setRemark(String remark) {
		this.remark = remark;
	}

	/**
	 * 对方卡号
	 *
	 * //@return
	 */
	public String getOppositeCardNo() {
		return oppositeCardNo;
	}

	/**
	 * 对方卡号
	 * 
	 * //@param oppositeCardNo
	 */
	public void setOppositeCardNo(String oppositeCardNo) {
		this.oppositeCardNo = oppositeCardNo;
	}

	/**
	 * 对方持卡人
	 *
	 * //@return
	 */
	public String getNameOnOppositeCard() {
		return nameOnOppositeCard;
	}

	/**
	 * 对方持卡人
	 * 
	 * //@param nameOnOppositeCard
	 */
	public void setNameOnOppositeCard(String nameOnOppositeCard) {
		this.nameOnOppositeCard = nameOnOppositeCard;
	}

	/**
	 * 对方银行
	 *
	 * //@return
	 */
	public String getOppositeBank() {
		return oppositeBank;
	}

	/**
	 * 对方银行
	 * 
	 * //@param oppositeBank
	 */
	public void setOppositeBank(String oppositeBank) {
		this.oppositeBank = oppositeBank;
	}

	@Override
	public boolean equals(Object except) {
		return ObjectUtil.equals(this.getClass(), this, except);
	}

	@Override
	public String toString(){
		return ObjectUtil.toString(this.getClass(), this);
	}
}
